My portfolio¶

In [1]:
%load_ext autoreload
%autoreload 2
In [2]:
from src.domain import *

TOTAL = 1

large_us_stocks = {
    "VTI": 0.8,
    "VNQ (REIT)": 0.2
}

large_exus_stocks = {
    "EAFE": 1
}

small_us_stocks = {
    "Russell 2000": 1
}

small_exus_stocks = {
    "EAFE Small-Cap": 1
}

bonds = {
    "BND": 1,
}

fund_shares = [large_us_stocks, large_exus_stocks, small_us_stocks, small_exus_stocks, bonds]

categories = SharesCategoriesDistribution(
        by_type=dict(zip((ShareType.Stock, ShareType.Bond), (0.75, 0.25))),
        by_region=dict(zip((Region.US, Region.ExUS), (0.7, 0.3))),
        by_cap=dict(zip((Cap.Large, Cap.Small), (0.8, 0.2))),
        by_term=dict(zip((Term.Long, ), (1, ))),
    )

distribution = SharesDistribution(
    categories=categories,
    funds=fund_shares
)



def assert_shares(obj):
    assert(sum(obj.values()) == TOTAL)

for shares in [categories.by_cap, categories.by_region, categories.by_term, categories.by_type] + fund_shares:
    assert_shares(shares)

###

flatten_stock_portfolio = []

stock_share = categories.by_type[ShareType.Stock]

for (region_key, region_value) in categories.by_region.items():
    for (cap_key, cap_value) in categories.by_cap.items():
        flatten_stock_portfolio.append({
            "region": region_key.value,
            "share": stock_share * region_value * cap_value,
            "cap": cap_key.value
        })
        
def sort_by_share(portfolio):
    return sorted(portfolio, key=lambda x: x["share"], reverse=True)
        
flatten_stock_portfolio = sort_by_share(flatten_stock_portfolio)
In [3]:
from collections import OrderedDict
import pandas as pd
from IPython.display import display
from src.portfolio import prepare_stock_table_rows, get_stock_name
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA

stocks_table = prepare_stock_table_rows(flatten_stock_portfolio)
    
df = pd.DataFrame(stocks_table, columns=['Share', 'Share of all'], index=[get_stock_name(x) for x in flatten_stock_portfolio])
display(df)

display_portfolio(distrib=distribution, extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
Share Share of all
Us Large-cap stocks 56.0% 42.0%
Ex-us Large-cap stocks 24.0% 18.0%
Us Small-cap stocks 14.0% 10.5%
Ex-us Small-cap stocks 6.0% 4.5%
Portfolio
VTI 33.6%
VNQ (REIT) 8.4%
EAFE 18.0%
Russell 2000 10.5%
EAFE Small-Cap 4.5%
BND 25.0%
Mean ret. Std
Portfolio 8.56% 11.08%
VTI 10.98% 15.55%
BND 6.72% 5.3%

Golden Butterfly Portfolio¶

  • 20.00 % | IJS iShares S&P Small-Cap 600 Value Equity | U.S., Small Cap, Value
  • 20.00 % | VTI Vanguard Total Stock Market Equity | U.S., Large Cap
  • 20.00 % | TLT iShares 20+ Year Treasury Bond Bond | U.S., Long-Term
  • 20.00 % | SHY iShares 1-3 Year Treasury Bond Bond | U.S., Short Term
  • 20.00 % | GLD SPDR Gold Trust Commodity | Gold
In [4]:
from collections import OrderedDict
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA

display_portfolio(SharesDistribution(funds=[OrderedDict({
    "VTI": 0.2,
    "GLD": 0.2,
    "BND": 0.2,
    "SHY": 0.2,
    "Russell 2000": 0.2,
})]), extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
Portfolio
VTI 20.0%
GLD 20.0%
BND 20.0%
SHY 20.0%
Russell 2000 20.0%
Mean ret. Std
Portfolio 7.55% 7.51%
VTI 10.98% 15.55%
BND 6.72% 5.3%

Ray Dalio All Weather Portfolio¶

  • 30.00 % | VTI Vanguard Total Stock Market Equity | U.S., Large Cap
  • 40.00 % | TLT iShares 20+ Year Treasury Bond Bond | U.S., Long-Term
  • 15.00 % | IEI iShares 3-7 Year Treasury Bond Bond | U.S., Intermediate-Term
  • 7.50 % | GLD SPDR Gold Trust Commodity | Gold
  • 7.50 % | GSG iShares S&P GSCI Commodity Indexed Trust | Commodity, Broad Diversified
In [5]:
from collections import OrderedDict
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA

display_portfolio(SharesDistribution(funds=[OrderedDict({
    "VTI": 0.3,
    "BND": 0.4,
    "SHY": 0.15,
    "GLD": 0.075,
    "DBC": 0.075,
})]), extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
Portfolio
VTI 30.0%
BND 40.0%
SHY 15.0%
GLD 7.5%
DBC 7.5%
Mean ret. Std
Portfolio 6.84% 6.35%
VTI 10.98% 15.55%
BND 6.72% 5.3%